<script>
  //   给你一个整数数组 nums ，请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同，请你按照数值本身将它们 降序 排序。

  //   请你返回排序后的数组。

  //   示例 1：

  //   输入：nums = [1,1,2,2,2,3]
  //   输出：[3,1,1,2,2,2]
  //   解释：'3' 频率为 1，'1' 频率为 2，'2' 频率为 3 。
  //   示例 2：

  //   输入：nums = [2,3,1,3,2]
  //   输出：[1,3,3,2,2]
  //   解释：'2' 和 '3' 频率都为 2 ，所以它们之间按照数值本身降序排序。
  //   示例 3：

  //   输入：nums = [-1,1,-6,4,5,-6,1,4,1]
  //   输出：[5,-1,4,4,-6,-6,1,1,1]

  //   来源：力扣（LeetCode）
  //   链接：https://leetcode.cn/problems/sort-array-by-increasing-frequency

  /**
   * 思路分析
   * 频率的话 我考虑使用map 找到相同的进行存放
   * 核心思路就是 cnt1 = get(a) cnt2 = get(b) 不相等 说明map 的大小不一样 cnt1- cnt2
   * 相等 b - a
   * 返回 排序后的数组 即可
   */

  /**
   * @param {number[]} nums
   * @return {number[]}
   */
  var nums = [1, 1, 2, 2, 2, 3];
  var frequencySort = function (nums) {
    var cnt = new Map();
    for (const num of nums) {
      cnt.set(num, (cnt.get(num) || 0) + 1);
    }

    nums.sort((a, b) => {
      const cnt1 = cnt.get(a),
        cnt2 = cnt.get(b);
      return cnt1 !== cnt2 ? cnt1 - cnt2 : b - a;
    });

    return nums;
  };

  console.log(frequencySort(nums));
</script>
